import {CodePlatformCommon, UniAppPlatform, VueVersion} from "./types";

/**
 * 应用版本信息接口
 * @interface AppVersion
 */
export interface AppVersion {
  /** 应用ID */
  appid: string;
  /** 版本号 */
  version: string;
  /** 版本代码 */
  versionCode: string;
}

export class Platform {
  /**
   * 获取当前运行平台
   * @returns {UniAppPlatform} 平台标识
   */
  public static getPlatform(): UniAppPlatform {
    return uni.getSystemInfoSync().uniPlatform as UniAppPlatform;
  }

  /**
   * 获取当前 Vue 版本
   * @returns {VueVersion} Vue 版本标识
   */
  public static getVueVersion(): VueVersion {
    let platform: VueVersion = 'VUE2';

    // #ifdef VUE3
    platform = 'VUE3';
    // #endif

    return platform;
  }

  /**
   * 判断是否 APP 平台
   * @returns {boolean} 是否 APP 平台
   */
  public static isApp(): boolean {
    let res = false;
    // #ifdef APP
    res = true;
    // #endif
    return res;
  }

  /**
   * 判断是否安卓平台，仅 uniappx 有效
   * @returns {boolean} 是否安卓平台
   */
  public static isAndroid(): boolean {
    let res = false;
    // #ifdef APP-ANDROID
    res = true;
    // #endif
    return res;
  }

  /**
   * 判断是否iOS平台，仅 uniappx 有效
   * @returns {boolean} 是否iOS平台
   */
  public static isIOS(): boolean {
    let res = false;
    // #ifdef APP-IOS
    res = true;
    // #endif
    return res;
  }

  /**
   * 判断是否鸿蒙平台，仅 uniappx 有效
   * @returns {boolean} 是否鸿蒙平台
   */
  public static isHarmony(): boolean {
    let res = false;
    // #ifdef APP-HARMONY
    res = true;
    // #endif
    return res;
  }

  /**
   * 判断是否小程序平台
   * @returns {boolean} 是否小程序平台
   */
  public static isMp(): boolean {
    let res = false;
    // #ifdef MP
    res = true;
    // #endif
    return res;
  }

  /**
   * 判断是否快应用
   */
  public static isQuickApp(): boolean {
    let res = false;
    // #ifdef QUICKAPP-WEBVIEW
    res = true;
    // #endif
    return res;
  }

  /**
   * 获取当前编译平台
   * @returns {CodePlatform} 编译平台标识
   */
  public static getCodePlatform(): CodePlatformCommon {
    // 使用条件编译获取当前编译平台
    let platform: CodePlatformCommon;

    // #ifdef UNI-APP-X
    platform = 'UNI-APP-X';
    // #endif

    // #ifdef APP-PLUS
    platform = 'APP-PLUS';
    // #endif

    // #ifdef APP-PLUS-NVUE || APP-NVUE
    platform = 'APP-NVUE';
    // #endif

    // #ifdef WEB
    platform = 'WEB';
    // #endif

    // #ifdef MP-WEIXIN
    platform = 'MP-WEIXIN';
    // #endif

    // #ifdef MP-ALIPAY
    platform = 'MP-ALIPAY';
    // #endif

    // #ifdef MP-BAIDU
    platform = 'MP-BAIDU';
    // #endif

    // #ifdef MP-TOUTIAO
    platform = 'MP-TOUTIAO';
    // #endif

    // #ifdef MP-LARK
    platform = 'MP-LARK';
    // #endif

    // #ifdef MP-QQ
    platform = 'MP-QQ';
    // #endif

    // #ifdef MP-KUAISHOU
    platform = 'MP-KUAISHOU';
    // #endif

    // #ifdef MP-JD
    platform = 'MP-JD';
    // #endif

    // #ifdef MP-360
    platform = 'MP-360';
    // #endif

    // #ifdef MP-HARMONY
    platform = 'MP-HARMONY';
    // #endif

    // #ifdef MP-XHS
    platform = 'MP-XHS';
    // #endif

    // #ifdef QUICKAPP-WEBVIEW-UNION
    platform = 'QUICKAPP-WEBVIEW-UNION';
    // #endif

    // #ifdef QUICKAPP-WEBVIEW-HUAWEI
    platform = 'QUICKAPP-WEBVIEW-HUAWEI';
    // #endif

    return platform;
  }

  /**
   * 检查当前是否在H5环境
   * @returns {boolean} 是否为H5环境
   */
  public static isWeb(): boolean {
    return this.getPlatform() === 'web';
  }

  /**
   * 检查当前是否在微信H5环境
   * @returns {boolean} 是否为微信H5环境
   */
  public static isWechatWeb(): boolean {
    if (!this.isWeb()) {
      return false;
    }
    if (!navigator) {
      return false;
    }
    const ua = navigator.userAgent.toLowerCase();
    return /micromessenger/.test(ua);
  }

  /**
   * 检查当前是否在微信环境
   * @returns {boolean} 是否为微信环境
   */
  public static isWechat(): boolean {
    return this.getPlatform() === 'mp-weixin' || this.isWechatWeb();
  }
}
